home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / sysv-rc / saveconfig
Text File  |  2009-10-19  |  2KB  |  95 lines

  1. #! /usr/bin/perl
  2. #
  3. # saveconfig
  4. #
  5. # Print out the configuration of the current /etc/rc?.d
  6. # symlink setup, in a format compatible to the
  7. # "update-rc.d" command line.
  8. #
  9. # Author: Miquel van Smoorenburg <miquels@cistron.nl>
  10. # Adjusted by Petter Reinholdtsen
  11. #
  12.  
  13. sub usage {
  14.     print STDERR "error: ", @_, "\n" if @_;
  15.     print STDERR <<EOF;
  16. saveconfig [-h] [-s <archivedir>]
  17.   -s  save each scripts setting in directory <archivedir>
  18.   -h  show usage inforation
  19. EOF
  20. }
  21.  
  22. my $archivedir = "";
  23.  
  24. while($#ARGV >= 0 && ($_ = $ARGV[0]) =~ /^-/) {
  25.         shift @ARGV;
  26.         if (/^-s$/) { $archivedir = shift; usage("Missing -s argument"), exit 1 unless $archivedir; next }
  27.         if (/^-h|--help$/) { &usage; }
  28.         &usage("unknown option");
  29. }
  30.  
  31. chdir "/etc/init.d";
  32.  
  33. sub scan {
  34.     my $dir = shift;
  35.     local *DD;
  36.     my $f;
  37.     opendir DD, $dir;
  38.     foreach $f (readdir DD) {
  39.         next if ($f =~ m/^\./);
  40.         push @{$dir{$dir}}, $f;
  41.     }
  42.     closedir DD;
  43. }
  44.  
  45. foreach my $d (qw(S 0 1 2 3 4 5 6 7 8 9)) {
  46.     scan("/etc/rc$d.d");
  47. }
  48. scan("/etc/init.d");
  49.  
  50. foreach my $s (@{$dir{"/etc/init.d"}}) {
  51.     my %start;
  52.     my %stop;
  53.     my $start = 0;
  54.     my $stop = 0;
  55.     foreach my $l (qw(S 0 1 2 3 4 5 6)) {
  56.         #print "L: $l\n";
  57.         foreach my $f (@{$dir{"/etc/rc$l.d"}}) {
  58.             #print "F: $f\n";
  59.             if ($f =~ m#^S(\d+)$s$#) {
  60.                 $start{$1} .= "$l ";
  61.                 $start = 1;
  62.             }
  63.             if ($f =~ m#^K(\d+)$s$#) {
  64.                 $stop{$1} .= "$l ";
  65.                 $stop = 1;
  66.             }
  67.         }
  68.     }
  69.         my $entry;
  70.         if ($start || $stop) {
  71.         $entry = "update-rc.d $s ";
  72.         if ($start > 0) {
  73.             foreach my $x (sort keys %start) {
  74.                 $entry .= "start $x " . $start{$x} . ". ";
  75.             }
  76.         }
  77.         if ($stop > 0) {
  78.             foreach my $x (sort keys %stop) {
  79.                 $entry .= "stop $x " . $stop{$x} . ". ";
  80.             }
  81.         }
  82.         $entry .= "\n";
  83.         if ($archivedir) {
  84.             my $file = "$archivedir/$s";
  85.             open(FILE, ">", "${file}.new") ||
  86.                 die "Unable to write to $file";
  87.             print FILE $entry;
  88.             close(FILE);
  89.             rename "${file}.new", "$file";
  90.         } else {
  91.             print $entry;
  92.         }
  93.     }
  94. }
  95.